package ucla.axelia.controlador.servicios;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;

import com.obelisco.modelo.data.DataGenerica;

import ucla.axelia.controlador.interfaces.IServicioAdministracionReporteInicioFin;
import ucla.axelia.modelo.beans.EstadisticasActividades;
import ucla.axelia.modelo.dao.ServicioActividadEjecutadaDAO;
import ucla.axelia.modelo.dao.ServicioActividadPlanificadaDAO;
import ucla.axelia.modelo.dao.ServicioActividadSuspendidaDAO;

public class ServicioAdministracionReporteEstadisticoActividades
		implements IServicioAdministracionReporteInicioFin{

	private ServicioActividadEjecutadaDAO servicioActividadEjecutadaDAO;
	private ServicioActividadSuspendidaDAO servicioActividadSuspendidaDAO;
	private ServicioActividadPlanificadaDAO servicioActividadPlanificadaDAO;
	
	@Override
	public List<EstadisticasActividades> obtenerLista(Date fechaInicio, Date fechaFin) {
		List<EstadisticasActividades> listaEstadisticasActividades = new ArrayList<EstadisticasActividades>();
		EstadisticasActividades estadisticasActividades = new EstadisticasActividades();
		List<Criterion> criterios;
		
		criterios = new ArrayList<Criterion>();
		criterios.add(Restrictions.ge("fechaInicioActividadEjecutada", fechaInicio));
		criterios.add(Restrictions.le("fechaFinActividadEjecutada", fechaFin));
		estadisticasActividades.setTotalEjecutadas(
				servicioActividadEjecutadaDAO.buscarPorPropiedades(criterios, DataGenerica.DATA_ACTIVO).size());
		
		Session sesion = servicioActividadSuspendidaDAO.getSessionFactory().getCurrentSession();
		Query query = sesion.createQuery("from ActividadSuspendida " +
				"where actividadPlanificada.fechaInicioActividadPlanificada >= :fechaInicio " +
				"and actividadPlanificada.fechaFinActividadPlanificada <= :fechaFin " +
				"and estado = :estado");
		query.setDate("fechaInicio", fechaInicio);
		query.setDate("fechaFin", fechaFin);
		query.setString("estado", DataGenerica.DATA_ACTIVO);
		estadisticasActividades.setTotalSuspendidas(query.list().size());
		
		criterios = new ArrayList<Criterion>();
		criterios.add(Restrictions.ge("fechaInicioActividadPlanificada", fechaInicio));
		criterios.add(Restrictions.le("fechaFinActividadPlanificada", fechaFin));
		estadisticasActividades.setTotalPlanificadas(
				servicioActividadPlanificadaDAO.buscarPorPropiedades(criterios, DataGenerica.DATA_ACTIVO).size());
		
		listaEstadisticasActividades.add(estadisticasActividades);
		return listaEstadisticasActividades;
	}

	
	// Setters y Getters
	
	public ServicioActividadEjecutadaDAO getServicioActividadEjecutadaDAO() {
		return servicioActividadEjecutadaDAO;
	}

	public void setServicioActividadEjecutadaDAO(
			ServicioActividadEjecutadaDAO servicioActividadEjecutadaDAO) {
		this.servicioActividadEjecutadaDAO = servicioActividadEjecutadaDAO;
	}

	public ServicioActividadSuspendidaDAO getServicioActividadSuspendidaDAO() {
		return servicioActividadSuspendidaDAO;
	}

	public void setServicioActividadSuspendidaDAO(
			ServicioActividadSuspendidaDAO servicioActividadSuspendidaDAO) {
		this.servicioActividadSuspendidaDAO = servicioActividadSuspendidaDAO;
	}

	public ServicioActividadPlanificadaDAO getServicioActividadPlanificadaDAO() {
		return servicioActividadPlanificadaDAO;
	}

	public void setServicioActividadPlanificadaDAO(
			ServicioActividadPlanificadaDAO servicioActividadPlanificadaDAO) {
		this.servicioActividadPlanificadaDAO = servicioActividadPlanificadaDAO;
	}
	
}
